﻿/// <summary>
/// Script de controlador del layaut del site.
/// </summary>
/// <remarks>
/// Creacion: 	GMD(EMP) 24/03/2015
/// </remarks>
ns('Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.FormularioRegistro');
Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.FormularioRegistro.Controller = function () {
    var base = this;
    base.Ini = function () {
        'use strict'

        base.Control.TabFormularioRegistro().tabs();

        base.Control.ValFormularioRegistro = new Pe.GMD.UI.Web.Components.Validator({
            form: base.Control.FrmFormularioRegistro(),
            messages: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompraResource,
            validationsExtra: base.Function.ObtenerValidacionesAdicionales()
        });

        base.Control.BtnGrabar().click(base.Event.BtnGrabarClick);
        base.Control.BtnCancelar().click(base.Event.BtnCancelarClick);
        base.Control.BtnCopiar().click(base.Event.BtnCopiarClick);
        base.Control.BtnExportar().click(base.Event.BtnExportarClick);

        base.Control.BtnAprobarRegistro().click(base.Event.BtnAprobarRegistroClick);

        base.Control.BtnAgregarArticulo().click(base.Event.BtnAgregarArticuloClick);
        base.Control.BtnEliminarArticulo().click(base.Event.BtnEliminarArticuloClick);
        base.Control.SlcProveedor().change(base.Event.SlcProveedorChange);

        
        base.Control.TxtProyecto().tokenInput(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarProyecto.Actions.Buscar, {
            hintText: 'Ingrese el termino a buscar',
            noResultsText: 'No se encontraron resultados',
            searchingText: 'Buscando...',
            method: 'POST',
            tokenLimit: 1,
            queryParam: 'NombreProyecto',
            propertyToSearch: 'NombreProyecto',
            minChars: 1,
            resultsFormatter: function (item) {
                return "<li>" + item.CodigoProyecto + " - " + item.NombreCliente + " - " + item.NombreProyecto + "</li>"
            },
            tokenFormatter: function (item) {
                return "<li>" + item.NombreProyecto + "</li>"
            },
            onResult: function (data) {
                return data.Result;
            },
            onAdd: function (item) {
                base.Parameters.Proyecto = item;
                base.Function.CargarProyecto(base.Parameters.Proyecto);
                base.Function.CargarProveedor(base.Parameters.Proyecto.CodigoProyecto);
            },
            onDelete: function (item) {
                base.Control.TxtNumeroProyecto().val('');
                base.Control.SlcMonedaProyecto().val('');
                base.Parameters.Proyecto = null;
                base.Parameters.ListaProveedor = null;
                base.Function.LimpiarLista(base.Control.SlcProveedor());
                base.Function.LimpiarProveedor();
            }
        });        

        base.Control.FormularioProyectoDetalle.DlgFormulario = new Pe.GMD.UI.Web.Components.Dialog({
            title: 'Orden de Compra Detalle', //Proyecto Detalle
            target: 'divProyectoProveedorDetalleContainer'
        });
        base.Control.FormularioProyectoDetalle.BtnAgregar().click(base.Event.FormularioProyectoDetalle.BtnAgregarClick);
        base.Function.CrearGridProyectoDetalle();

        base.Function.CrearGrid();

        if (Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Model.OrdenCompra != null) {
            base.Function.CargarOrdenCompra(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Model.OrdenCompra);
            base.Function.ConfigurarOpciones(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Model.OrdenCompra);
        }
    };

    base.Parameters = {
        Proyecto: null,
        Proveedor: null,
        ListaProveedor: null,
        OrdenCompra: {
            CodigoOrdenCompra: 0
        }
    };

    base.Control = {
        ValFormularioRegistro: null,

        Mensaje: new Pe.GMD.UI.Web.Components.Message(),
        FrmFormularioRegistro: function () { return $('#frmFormularioRegistro'); },
        TabFormularioRegistro: function () { return $('#tabFormularioRegistro'); },

        TxtProyecto: function () { return $('#txtFormularioRegistroProyecto'); },
        TxtNumeroProyecto: function () { return $('#txtFormularioRegistroNumeroProyecto'); },
        TxtNumero: function () { return $('#txtFormularioRegistroNumero'); },
        SlcMonedaProyecto: function () { return $('#slcFormularioRegistroMonedaProyecto'); },

        SlcProveedor: function () { return $('#slcFormularioRegistroProveedor'); },
        TxtRucProveedor: function () { return $('#txtFormularioRegistroRucProveedor'); },
        TxtDireccionProveedor: function () { return $('#txtFormularioRegistroDireccionProveedor'); },
        TxtDistritoProveedor: function () { return $('#txtFormularioRegistroDistritoProveedor'); },

        TxtTelefono1Proveedor: function () { return $('#txtFormularioRegistroTelefono1Proveedor'); },
        TxtTelefono2Proveedor: function () { return $('#txtFormularioRegistroTelefono2Proveedor'); },
        TxtTelefono3Proveedor: function () { return $('#txtFormularioRegistroTelefono3Proveedor'); },
        TxtContactoProveedor: function () { return $('#txtFormularioRegistroContactoProveedor'); },

        TxtCorreoProveedor: function () { return $('#txtFormularioRegistroCorreoProveedor'); },
        SlcMoneda: function () { return $('#slcFormularioRegistroMoneda'); },
        TxtFechaEntrega: function () { return $('#txtFormularioRegistroFechaEntrega'); },
        TxtLugar: function () { return $('#txtFormularioRegistroLugar'); },

        TxtObservaciones: function () { return $('#txtFormularioRegistroObservaciones'); },
        TxtAdelanto: function () { return $('#txtFormularioRegistroAdelanto'); },
        TxtCuota: function () { return $('#txtFormularioRegistroCuota'); },
        SlcFrecuencia: function () { return $('#slcFormularioRegistroFrecuencia'); },
        TxtDetraccion: function () { return $('#txtFormularioRegistroDetraccion'); },
        

        BtnCancelar: function () { return $('#btnCancelarRegistro'); },
        BtnGrabar: function () { return $('#btnGrabarRegistro'); },
        BtnCopiar: function () { return $('#btnCopiarRegistro'); },
        BtnExportar: function () { return $('#btnExportarRegistro'); },

        BtnAprobarRegistro: function () { return $('#btnAprobarRegistro'); },

        BtnAgregarArticulo: function () { return $('#btnAgregarArticulo'); },
        BtnEliminarArticulo: function () { return $('#btnEliminarArticulo'); },

        TxtSubTotal: function () { return $('#txtFormularioRegistroSubTotal'); },
        TxtIgv: function () { return $('#txtFormularioRegistroIgv'); },
        TxtTotal: function () { return $('#txtFormularioRegistroTotal'); },

        DivGridDetalleContainer: function () { return $('#divGridDetalleContainer'); },
        GriDetalle: {
            Columns: null,
            Table: null
        },
        FormularioProyectoDetalle: {
            DlgFormulario: null,
            GrdResultado: null,
            BtnAgregar: function () { return $('#btnProyectoProveedorDetalleAgregar'); }
        }
    };

    base.Event = {
        BtnGridEditClick: function () {
            base.Control.GrdDetalle.core.row($(this).parents('tr')).remove().draw();
        },
        BtnAgregarArticuloClick: function () {
            if (base.Control.SlcProveedor().val() != '' && base.Parameters.Proyecto != null && base.Parameters.Proyecto.CodigoProyecto > 0) {
                
                var codigoProveedor = base.Control.SlcProveedor().val();
                var codigoProyecto = base.Parameters.Proyecto.CodigoProyecto;
                base.Control.FormularioProyectoDetalle.DlgFormulario.open();

                var registros = base.Function.ObtenerDataDetalle();
                //var codigos = new Array();
                var codigos = [];
                $.each(registros, function (index, registro) {
                    codigos.push(registro.CodigoArticulo);
                    //codigos.push([registro.CodigoArticulo, registro.Cantidad]);
                });

                var filtro = {
                    codigoProveedor: codigoProveedor,
                    codigoProyecto: codigoProyecto,
                    codigos: codigos
                };

                base.Control.FormularioProyectoDetalle.GrdResultado.Load(filtro);

                return false;
            } else {
                base.Control.Mensaje.Warning({
                    message: 'Debe seleccionar evento y proveedor'
                });
            }
        },
        BtnEliminarArticuloClick: function () {
            var seleccionados = base.Control.DivGridDetalleContainer().find('input:checked');
            if (seleccionados.length > 0) {
                $(seleccionados).each(function (index, seleccionado) {
                    seleccionados.closest('tr').remove();
                });

                base.Function.CalcularSubTotal();
            } else {
                base.Control.Mensaje.Warning({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.DebeSeleccionarRegistro
                });
            }
            return false;
        },
        BtnCancelarClick: function () {
            'use strict'
            window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.Index;
        },
        BtnGrabarClick: function () {
            'use strict'
            var listaDetalle = base.Function.ObtenerDataDetalle();

            if (base.Control.ValFormularioRegistro.isValid()) {
                if (listaDetalle.length > 0) {

                    if (parseFloat(base.Control.TxtAdelanto().val()) <= parseFloat(base.Control.TxtTotal().val())) {
                        base.Control.Mensaje.Confirmation({
                            message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.ConfirmacionGuardar,
                            onAccept: function () {

                                base.Ajax.AjaxGrabar.data = {
                                    CodigoOrdenCompra: base.Parameters.OrdenCompra.CodigoOrdenCompra,
                                    CodigoProyecto: base.Parameters.Proyecto.CodigoProyecto,
                                    CodigoProveedor: base.Control.SlcProveedor().val(),
                                    CodigoMoneda: base.Control.SlcMoneda().val(),
                                    FechaEntrega: base.Control.TxtFechaEntrega().val(),
                                    LugarEntrega: base.Control.TxtLugar().val(),
                                    Observaciones: base.Control.TxtObservaciones().val(),
                                    MontoAdelanto: base.Control.TxtAdelanto().val(),
                                    NumeroCuota: base.Control.TxtCuota().val(),
                                    FrecuenciaCuota: base.Control.SlcFrecuencia().val(),

                                    UsuarioCreacion: 'admin',
                                    UsuarioModificacion: 'admin',
                                    ListaOrdenCompraDetalle: listaDetalle
                                };
                                base.Ajax.AjaxGrabar.submit();

                            }
                        });
                    } else {
                        base.Control.Mensaje.Warning({
                            message: 'Debe ingresar un monto de adelanto menor al monto total de la Orden de Compra'
                        });
                    }                    

                } else {
                    base.Control.Mensaje.Warning({
                        message: 'Debe ingresar al menos un articulo'
                    });
                }
            }
        },
        BtnAprobarRegistroClick: function () {
            'use strict'

            if (base.Parameters.OrdenCompra.CodigoOrdenCompra > 0) {
                base.Control.Mensaje.Confirmation({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.ConfirmacionGuardar,
                    onAccept: function () {
                        base.Ajax.AjaxAprobar.data = {
                            codigos: [base.Parameters.OrdenCompra.CodigoOrdenCompra]
                        };
                        base.Ajax.AjaxAprobar.submit();
                    }
                });
            }
        },
        BtnCopiarClick: function () {
            'use strict'
            base.Ajax.AjaxCopiar.data = {
                codigo: base.Parameters.OrdenCompra.CodigoOrdenCompra
            };
            base.Ajax.AjaxCopiar.submit();
        },
        BtnExportarClick: function () {
            window.open(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.Exportar + "?codigo=" + base.Parameters.OrdenCompra.CodigoOrdenCompra);
        },

        SlcProveedorChange: function () {
            base.Function.LimpiarProveedor();

            var codigoProveedor = base.Control.SlcProveedor().val();
            var proveedorSeleccionado = null;

            $(base.Parameters.ListaProveedor).each(function (index, proveedor) {
                if (proveedor.CodigoProveedor == codigoProveedor) {
                    proveedorSeleccionado = proveedor;
                    return;
                }
            });

            if (proveedorSeleccionado != null) {
                base.Function.MostrarProveedor(proveedorSeleccionado);
            }

        },
        AjaxGrabarSuccess: function (data) {
            'use strict'
            base.Control.Mensaje.Information({
                message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito
            });

            Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Model.OrdenCompra = data.Result;

            if (Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Model.OrdenCompra != null) {
                base.Function.CargarOrdenCompra(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Model.OrdenCompra);
                base.Function.ConfigurarOpciones(Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Model.OrdenCompra);
            }
            
            //base.Control.Mensaje.Information({
            //    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito
            //});

            //window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.Index;
        },
        AjaxAprobarSuccess: function (data) {
            if (data.CodeResult == -1) {
                base.Control.Mensaje.Warning({
                    message: 'Usted no cuenta con permisos para realizar esta operación'
                });
            } else {
                base.Control.Mensaje.Information({
                    message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito
                });

                window.location.href = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.Index;
            }
        },
        GridDetalleKeyup: function () {

            var tr = $(this).closest('tr');
            var cantidad = tr.find('.Cantidad').html();
            var precioUnitario = tr.find('.PrecioUnitario').val();
            var montoTotal = cantidad * precioUnitario;

            tr.find('.MontoTotal').html(montoTotal);

            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: tr.find('.MontoTotal')
            });

            base.Function.CalcularSubTotal();
        },

        AjaxBuscarProveedorProyectoSuccess: function (response) {
            var data = response.Result;
            base.Parameters.ListaProveedor = data;
            $.each(data, function (index, value) {
                base.Control.SlcProveedor().append($('<option />').val(value.CodigoProveedor).text(value.Nombre));
            });

            if (base.Parameters.Proveedor != null) {
                base.Control.SlcProveedor().val(base.Parameters.Proveedor.CodigoProveedor);
                base.Event.SlcProveedorChange();
                base.Function.CargarDetalle(base.Parameters.ListaOrdenCompraDetalle);
            }
        },
        FormularioProyectoDetalle: {
            BtnGridSelectClick: function (row, data) {
                base.Function.CrearRow(data);
                base.Control.FormularioProyectoDetalle.DlgFormulario.close();
            },
            BtnAgregarClick: function () {
                var seleccionados = base.Control.FormularioProyectoDetalle.GrdResultado.GetSelectedData();
                if (seleccionados.length > 0) {
                    var listaDetalle = base.Function.ObtenerDataDetalle();

                    $.each(seleccionados, function (index, seleccionado) {
                        base.Function.CrearRow(seleccionado);
                    });
                    base.Function.CalcularSubTotal();
                    base.Control.FormularioProyectoDetalle.DlgFormulario.close();
                } else {
                    base.Control.Mensaje.Warning({ message: 'Debe seleccionar el menos un registro' });
                }
            }
        },
        AjaxCopiarSuccess: function (data) {
            base.Control.Mensaje.Information({
                message: Pe.Petecos.Comercial.Presentacion.Base.MensajeGenerico.SeGuardoInformacionExito + ' Nueva orden de compra  : ' + data.Result.CodigoOrdenCompra
            });
        }
    };

    base.Ajax = {
        AjaxGrabar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.Registrar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxGrabarSuccess
        }),
        AjaxBuscarProveedorProyecto: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.BuscarProveedorProyecto,
            autoSubmit: false,
            onSuccess: base.Event.AjaxBuscarProveedorProyectoSuccess
        }),
        AjaxAprobar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.Aprobar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxAprobarSuccess
        }),
        AjaxCopiar: new Pe.GMD.UI.Web.Components.Ajax({
            action: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.Copiar,
            autoSubmit: false,
            onSuccess: base.Event.AjaxCopiarSuccess
        })
    };

    base.Function = {
        ConfigurarOpciones: function (model) {
            if (model.CodigoOrdenCompra > 0) {
                base.Control.BtnCopiar().show();
                base.Control.BtnExportar().show();
            }
            
            if (model.CodigoEstado == Pe.Petecos.Comercial.Presentacion.Enumerados.EstadoOrdenCompra.Generado) {
                base.Control.BtnAprobarRegistro().show();
            } //else if (model.CodigoEstado == Pe.Petecos.Comercial.Presentacion.Enumerados.EstadoEvento.PreAprobado) {
            //    base.Control.BtnAprobarRegistro().show();
            //} else if (model.CodigoEstado == Pe.Petecos.Comercial.Presentacion.Enumerados.EstadoEvento.Aprobado) {
            //    base.Control.BtnAceptarRegistro().show();
            //}
        },
        CrearGridProyectoDetalle: function () {
            var columns = new Array();
            columns.push({ data: 'CodigoArticuloProveedor', title: 'Codigox' });
            columns.push({ data: 'NombreArticulo', title: 'Producto' });
            columns.push({ data: 'NombreProveedor', title: 'Proveedor' });
            columns.push({ data: 'PrecioUnitario', title: 'Precio Sin IGV' });

            base.Control.FormularioProyectoDetalle.GrdResultado = new Pe.GMD.UI.Web.Components.Grid({
                renderTo: 'divGridProyectoProveedorDetalleContainer',
                hasSelectionRows: true,
                columns: columns,
                proxy: {
                    url: Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Actions.BuscarProyectoDetalle,
                    source: 'Result'
                }
            });
        },
        LimpiarProyecto: function () {
            base.Control.TxtNumeroProyecto().val('');
            base.Control.SlcMonedaProyecto().val('');
            base.Parameters.Proyecto = null;
            base.Parameters.ListaProveedor = null;
        },
        LimpiarProveedor: function () {
            base.Control.TxtRucProveedor().val('');
            base.Control.TxtDireccionProveedor().val('');
            base.Control.TxtDistritoProveedor().val('');
            base.Control.TxtTelefono1Proveedor().val('');
            base.Control.TxtTelefono2Proveedor().val('');
            base.Control.TxtTelefono3Proveedor().val('');
            base.Control.TxtContactoProveedor().val('');
            base.Control.TxtCorreoProveedor().val('');
            base.Control.GriDetalle.Table.find('tbody').html('');
        },
        MostrarProveedor: function (item) {
            base.Control.TxtRucProveedor().val(item.NumeroDocumento);
            base.Control.TxtDireccionProveedor().val(item.Direccion);
            base.Control.TxtDistritoProveedor().val(item.Distrito);
            base.Control.TxtTelefono1Proveedor().val(item.Telefono1);
            base.Control.TxtTelefono2Proveedor().val(item.Telefono2);
            base.Control.TxtTelefono3Proveedor().val(item.Telefono3);
            base.Control.TxtContactoProveedor().val(item.NombreContacto);
            base.Control.TxtCorreoProveedor().val(item.CorreoElectronico);
        },
        CargarProveedor: function (codigoProyecto) {
            base.Function.LimpiarLista(base.Control.SlcProveedor());
            base.Ajax.AjaxBuscarProveedorProyecto.data = {
                codigoProyecto: codigoProyecto
            };
            base.Ajax.AjaxBuscarProveedorProyecto.submit();
        },
        LimpiarLista: function (select) {
            select.val('');
            select.find('option').remove();
            select.append($('<option />').val('').text('--Seleccione--'));
        },
        OrdenarLista: function (lista, propiedad, ascendente) {
            return lista.sort(function (a, b) {
                if (ascendente) return (a[propiedad] > b[propiedad]);
                else return (b[propiedad] > a[propiedad]);
            });
        },
        CargarOrdenCompra: function (ordenCompra) {
            base.Parameters.OrdenCompra = ordenCompra;
            base.Parameters.Proyecto = {
                CodigoProyecto: ordenCompra.CodigoProyecto,
                NombreProyecto: ordenCompra.NombreProyecto,
                CodigoMoneda: ordenCompra.CodigoMonedaProyecto
            };

            base.Parameters.Proveedor = {
                CodigoProveedor: ordenCompra.CodigoProveedor
            };
            base.Parameters.ListaOrdenCompraDetalle = ordenCompra.ListaOrdenCompraDetalle;
            //accion = 1 si es visualizar, accion = '' si es editar
            //var accion = Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.Hidden.Accion;
            //if (accion == "1") base.Control.TxtProyecto().val(ordenCompra.NombreProyecto);
            //else base.Control.TxtProyecto().tokenInput('add', base.Parameters.Proyecto);
            base.Control.TxtProyecto().tokenInput('add', base.Parameters.Proyecto);
            base.Control.TxtNumero().val(ordenCompra.CodigoOrdenCompra);
            base.Control.SlcMoneda().val(ordenCompra.CodigoMoneda);
            base.Control.TxtFechaEntrega().val(ordenCompra.FechaEntrega);
            base.Control.TxtLugar().val(ordenCompra.LugarEntrega);
            base.Control.TxtObservaciones().val(ordenCompra.Observaciones);
            base.Control.TxtAdelanto().val(ordenCompra.MontoAdelanto);
            base.Control.TxtCuota().val(ordenCompra.NumeroCuota);
            base.Control.SlcFrecuencia().val(ordenCompra.FrecuenciaCuota);
            base.Control.TxtDetraccion().val(ordenCompra.MontoDetraccion);
        },
        CargarDetalle: function (listaDetalle) {

            $(listaDetalle).each(function (index, detalle) {
                detalle.PrecioUnitario = detalle.PrecioArticulo;
                base.Function.CrearRow(detalle);
            });

            base.Function.CalcularSubTotal();
        },
        CargarProyecto: function (item) {
            base.Control.TxtNumeroProyecto().val(item.CodigoProyecto);
            base.Control.SlcMonedaProyecto().val(item.CodigoMoneda);
        },
        CrearGrid: function () {
            var columns = new Array();
            columns.push({ data: 'CodigoArticulo', title: '', width: '10%', type: 'checkbox' });
            columns.push({ data: 'NombreArticulo', title: 'Descripcion', width: '60%', type: 'label' });
            columns.push({ data: 'Cantidad', title: 'Cantidad', width: '10%', type: 'label' });
            columns.push({ data: 'PrecioUnitario', title: 'Precio', width: '10%', type: 'text', format: 'decimal' });
            columns.push({ data: 'MontoTotal', title: 'Sub Total', width: '10%', type: 'label' });
            base.Control.GriDetalle.Columns = columns
            base.Control.GriDetalle.Table = base.Function.CrearTabla(base.Control.GriDetalle.Columns);
            base.Control.DivGridDetalleContainer().append(base.Control.GriDetalle.Table);
        },
        CrearTabla: function (columns) {
            var tableHeader = $('<table></table>')
            tableHeader.addClass('table table-striped table-bordered table-hover text-center text-middle dataTable no-footer');
            tableHeader.attr('style', 'width: 100%; margin: 0px !important');
            tableHeader.attr('role', 'grid');
            var thead = $('<thead></thead>');
            var tr = $('<tr></tr>');
            $(columns).each(function (index, column) {
                var td = $('<th></th>');
                td.addClass('sorting_disabled');
                td.css('width', column.width);
                td.html(column.title);
                tr.append(td);
            });

            thead.append(tr);
            tableHeader.append(thead);

            var tbody = $('<tbody></tbody>');
            tableHeader.append(tbody);

            return tableHeader;
        },
        CrearRow: function (articulo) {
            var tbody = base.Control.GriDetalle.Table.find('tbody');
            var tr = $('<tr></tr>');

            $(base.Control.GriDetalle.Columns).each(function (index, column) {
                var td = $('<td></td>');
                td.addClass('sorting_disabled');
                td.css('width', column.width);
                var control = null;

                if (column.type == 'checkbox') {
                    control = $('<input type="checkbox" />').val(articulo[column.data]);
                } else if (column.type == 'text') {
                    control = $('<input type="text" style="text-align: right" mask="' + column.format + '" />').val(articulo[column.data]).addClass('form-control');
                    control.keyup(base.Event.GridDetalleKeyup);
                } else {

                    if (column.data == 'MontoTotal') {
                        var monto = articulo['Cantidad'] * articulo['PrecioUnitario'];
                        control = $('<label></label>').html(monto);
                    } else {
                        control = $('<label></label>').html(articulo[column.data]);
                    }
                }
                control.addClass(column.data);
                td.append(control);
                tr.append(td);
            });
            tbody.append(tr);

            Pe.GMD.UI.Web.Components.TextBox.Function.Configure(base.Control.DivGridDetalleContainer().attr('id'));
        },
        ObtenerDataDetalle: function () {
            var listaDetalle = new Array();
            var tbody = base.Control.GriDetalle.Table.find('tbody');
            var filas = tbody.find('tr');
            $(filas).each(function (i, item) {
                var fila = $(item);
                var codigoArticulo = fila.find('.CodigoArticulo').val();
                var cantidad = parseInt(fila.find('.Cantidad').html());
                var precioUnitario = parseFloat(fila.find('.PrecioUnitario').val());
                listaDetalle.push({
                    CodigoArticulo: codigoArticulo,
                    PrecioArticulo: precioUnitario.toString(),
                    Cantidad: cantidad
                });
            });
            return listaDetalle;
        },
        ObtenerValidacionesAdicionales: function () {
            var validaciones = new Array();
            validaciones.push(
                    {
                        Event: function () {
                            var resultado = (base.Parameters.Proyecto != null);
                            return resultado;
                        },
                        codeMessage: 'EtiquetaProyecto'
                    }
                );
            return validaciones;
        },
        CalcularSubTotal: function () {
            var montos = base.Control.GriDetalle.Table.find('.MontoTotal');
            var subTotal = 0;
            var igv = 0;
            var total = 0;

            $(montos).each(function (i, monto) {
                subTotal += parseFloat($(monto).html());
            });
            base.Control.TxtSubTotal().val(subTotal);
            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: base.Control.TxtSubTotal()
            });

            igv = subTotal * 0.18;
            base.Control.TxtIgv().val(igv);
            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: base.Control.TxtIgv()
            });

            total = subTotal + parseFloat(base.Control.TxtIgv().val());
            base.Control.TxtTotal().val(total);
            Pe.GMD.UI.Web.Components.TextBox.Function.FormatDecimal({
                input: base.Control.TxtTotal()
            });
        }
    };

};


ns('Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.FormularioRegistro');
try {

    $(document).ready(function () {
        'use strict';
        Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.FormularioRegistro.Vista = new Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.FormularioRegistro.Controller();
        Pe.Petecos.Comercial.Presentacion.Ventas.AdministrarOrdenCompra.FormularioRegistro.Vista.Ini();
    });
} catch (ex) {
}